package com.thientan.service

import java.text.SimpleDateFormat

import com.thientan.export.ExportRequest
import com.thientan.model.HopDong
import com.thientan.model.ThongKePhieuThu
import com.thientan.utils.Constants;

class TimHopDongService extends AbstractService {
	ThongKePhieuThuService thongKePhieuThuService
	
	@Override
	protected Long[] getColWidth() {
		return [50, 100, 50, 100, 100, 100, 
				100, 100, 200, 150, 200, 
				100, 100, 100, 80, 120, 
				120, 120, 120, 120, 150, 
				120, 120, 120, 120, 120, 100, 100] as Long[]
	}

	@Override
	protected String[] getColTitles() {
		return ["STT", "Mã Hợp Đồng", "Đợt bán", "Trạng thái", "NV1", "NV2", 
				"Đội trưởng", "Thu ngân", "Khách hàng", "Số điện thoại", "Địa chỉ", 
				"Phường xã", "Quận huyện", "Thành phố", "Ngày bán", "Tổng tiền", 
				"Trả trước", "Đã thanh toán", "Còn lại", "Giảm giá", "Lí do giảm giá",
				"Đền hàng Đội trưởng", "Đền hàng NV", "Đền hàng cty", 
				"Tiền trả khách", "Tiền khấu hao", "Người sửa sau cùng", "Ngày sửa sau cùng"] as String[]
	}

	@Override
	protected String[] getColNames() {
		return ["stt", "maHd", "dotBan", "trangThaiText", "maNv1", "maNv2", 
				"maDt", "maTn",	"khHoTen", "khDt", "khDchi", 
				"khPxa", "khQhuyen", "khTpho", "ngayBanText", "giaTri", 
				"tienTraTruoc",	"tienDaThu", "tienConLai", "tienGiamGia", "liDoGiamGia", 
				"denDt", "denNv", "denCty", "tienTraKhach", "tienKhauHao", "maNvCapNhat", "ngayCapNhatText"] as String[]
	}

	@Override
	@SuppressWarnings("rawtypes")
	protected Class<?>[] getExportColType() {
		return [
			String.class,
			String.class,
			BigDecimal.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			String.class,
			BigDecimal.class, // tong tien
			BigDecimal.class,
			BigDecimal.class,
			BigDecimal.class,
			BigDecimal.class,
			String.class,
			BigDecimal.class, // den hang doi truong
			BigDecimal.class,
			BigDecimal.class,
			BigDecimal.class,
			BigDecimal.class,
			String.class,
			String.class ] as Class<?>[]
	}

	@Override
	void prepareParametersBeforeExport(ExportRequest er){
		er.addParameter("tongSoHd", this.exportData?.tongSoHd)
		er.addParameter("ngayXuat", this.exportData?.ngayXuat)
		er.addParameter("thoiGian", this.exportData?.thoiGian)
	}
	
	/**
	 * Update status of HopDong when perform action "giaoPhieuThu",
	 * then re-calculate statistics of PhieuThu
	 * @param hopDongIds Id of HopDongs retrieved from user's criteria
	 * @return Number of updated HopDong 
	 */
	Long giaoPhieuThu(List hopDongIds) {
		ThongKePhieuThu tkPt = thongKePhieuThuService.fetchOrCreateThongKePt()
		def sdformatter = new SimpleDateFormat(Constants.TO_DATE_FORMAT  + " " + Constants.TO_TIME_FORMAT)
		Date now = new Date()
		Long numHd = HopDong.executeUpdate("update HopDong hd set hd.daGiaoPhieu = '${sdformatter.format(now)}'" +
										   "where hd.id in (:ids)", [ids : hopDongIds])
		thongKePhieuThuService.updateThongKePhieuThu(tkPt, null, numHd, now /*always update*/)
		if (!tkPt.errors.hasErrors()) {
			return numHd
		} else {
			throw new Exception("Unable to update ThongKePhieuThu: ${tkPt.errors}")
		}
	}
}
